using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;

using UMEVOR.DTO;

using Microsoft.Practices.EnterpriseLibrary.Data;

namespace UMEVOR.DAL
{
    public class DALT_FOTO : DALConnection
    {

        #region Incluir

        public void incluir(T_FOTO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" INSERT INTO T_FOTO ");

                if (obj.TX_FOTO_GRDE != null && obj.TX_FOTO_PEQ != null)
                {
                    SQL.Append("    (ID_ATIVIDADE, TX_LEGENDA, TX_FOTO_PEQ, TX_FOTO_GRDE) ");
                    SQL.Append(" VALUES ");
                    SQL.Append("    (" + obj.ID_ATIVIDADE.ToString() + ", '" + obj.TX_LEGENDA + "'");
                    SQL.Append("    , '" + obj.TX_FOTO_PEQ.Replace("\\", "#") + "', '" + obj.TX_FOTO_GRDE.Replace("\\", "#") + "') ");
                }
                else
                {
                    if ((obj.TX_FOTO_GRDE == null) && (obj.TX_FOTO_PEQ == null))
                    {
                        SQL.Append("    (ID_ATIVIDADE, TX_LEGENDA) ");
                        SQL.Append(" VALUES ");
                        SQL.Append("    (" + obj.ID_ATIVIDADE.ToString() + ", '" + obj.TX_LEGENDA + "')");
                    }
                    else if (obj.TX_FOTO_PEQ == null)
                    {
                        SQL.Append("    (ID_ATIVIDADE, TX_LEGENDA, TX_FOTO_PEQ) ");
                        SQL.Append(" VALUES ");
                        SQL.Append("    (" + obj.ID_ATIVIDADE.ToString() + ", '" + obj.TX_LEGENDA + "'");
                        SQL.Append("    , '" + obj.TX_FOTO_PEQ.Replace("\\", "#") + "') ");
                    }
                    else if (obj.TX_FOTO_GRDE == null)
                    {
                        SQL.Append("    (ID_ATIVIDADE, TX_LEGENDA, TX_FOTO_GRDE) ");
                        SQL.Append(" VALUES ");
                        SQL.Append("    (" + obj.ID_ATIVIDADE.ToString() + ", '" + obj.TX_LEGENDA + "'");
                        SQL.Append("    , '" + obj.TX_FOTO_GRDE.Replace("\\", "#") + "') ");
                    }
                    
                }

                DbCommand insertT_FOTO = database.GetSqlStringCommand(SQL.ToString());

                insertT_FOTO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(insertT_FOTO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Incluir[]

        public void incluir(T_FOTO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] insertT_FOTO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_FOTO o = obj[index];
                    SQL = new StringBuilder();

                    SQL.Append(" INSERT INTO T_FOTO ");
                    SQL.Append("    (ID_FOTO, ID_ATIVIDADE_UMEVOR, ID_ATIVIDADE, TX_LEGENDA, TX_FOTO_PEQ, TX_FOTO_GRDE) ");
                    SQL.Append(" VALUES ");
                    SQL.Append("    (:ID_FOTO, :ID_ATIVIDADE_UMEVOR, :ID_ATIVIDADE, :TX_LEGENDA, :TX_FOTO_PEQ, :TX_FOTO_GRDE) ");

                    insertT_FOTO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(insertT_FOTO[index], ":ID_FOTO", DbType.Int64, o.ID_FOTO);
                    database.AddInParameter(insertT_FOTO[index], ":ID_ATIVIDADE_UMEVOR", DbType.Int64, o.ID_ATIVIDADE_UMEVOR);
                    database.AddInParameter(insertT_FOTO[index], ":ID_ATIVIDADE", DbType.Int64, o.ID_ATIVIDADE);
                    database.AddInParameter(insertT_FOTO[index], ":TX_LEGENDA", DbType.String, o.TX_LEGENDA);
                    database.AddInParameter(insertT_FOTO[index], ":TX_FOTO_PEQ", DbType.String, o.TX_FOTO_PEQ);
                    database.AddInParameter(insertT_FOTO[index], ":TX_FOTO_GRDE", DbType.String, o.TX_FOTO_GRDE);

                    insertT_FOTO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in insertT_FOTO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Alterar

        public void alterar(T_FOTO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" UPDATE T_FOTO SET ");                
                SQL.Append("    ID_ATIVIDADE = " + obj.ID_ATIVIDADE.ToString() + " , ");
                SQL.Append("    TX_LEGENDA = '" + obj.TX_LEGENDA + "' , ");
                SQL.Append("    TX_FOTO_PEQ = '" + obj.TX_FOTO_PEQ.Replace("\\", "#") + "' , ");
                SQL.Append("    TX_FOTO_GRDE = '" + obj.TX_FOTO_GRDE.Replace("\\", "#") + "' ");
                SQL.Append(" WHERE ");
                SQL.Append("     ID_FOTO = " + obj.ID_FOTO.ToString());

                DbCommand updateT_FOTO = database.GetSqlStringCommand(SQL.ToString());

                updateT_FOTO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(updateT_FOTO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Alterar[]

        public void alterar(T_FOTO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] updateT_FOTO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_FOTO o = obj[index];
                    SQL = new StringBuilder();
                    SQL.Append(" UPDATE T_FOTO SET ");
                    SQL.Append("    ID_ATIVIDADE_UMEVOR = :ID_ATIVIDADE_UMEVOR , ");
                    SQL.Append("    ID_ATIVIDADE = :ID_ATIVIDADE , ");
                    SQL.Append("    TX_LEGENDA = :TX_LEGENDA , ");
                    SQL.Append("    TX_FOTO_PEQ = :TX_FOTO_PEQ , ");
                    SQL.Append("    TX_FOTO_GRDE = :TX_FOTO_GRDE ");
                    SQL.Append(" WHERE ");
                    SQL.Append("     ID_FOTO = :ID_FOTO  ");

                    updateT_FOTO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(updateT_FOTO[index], ":ID_FOTO", DbType.Int64, o.ID_FOTO);
                    database.AddInParameter(updateT_FOTO[index], ":ID_ATIVIDADE_UMEVOR", DbType.Int64, o.ID_ATIVIDADE_UMEVOR);
                    database.AddInParameter(updateT_FOTO[index], ":ID_ATIVIDADE", DbType.Int64, o.ID_ATIVIDADE);
                    database.AddInParameter(updateT_FOTO[index], ":TX_LEGENDA", DbType.String, o.TX_LEGENDA);
                    database.AddInParameter(updateT_FOTO[index], ":TX_FOTO_PEQ", DbType.String, o.TX_FOTO_PEQ);
                    database.AddInParameter(updateT_FOTO[index], ":TX_FOTO_GRDE", DbType.String, o.TX_FOTO_GRDE);

                    updateT_FOTO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in updateT_FOTO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Excluir

        public void excluir(T_FOTO obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" DELETE FROM T_FOTO ");
                SQL.Append(" WHERE ");
                SQL.Append("     ID_FOTO = " + obj.ID_FOTO.ToString());

                DbCommand deleteT_FOTO = database.GetSqlStringCommand(SQL.ToString());

                deleteT_FOTO.CommandText = SQL.ToString();

                database.ExecuteNonQuery(deleteT_FOTO, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Excluir[]

        public void excluir(T_FOTO[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] deleteT_FOTO = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_FOTO o = obj[index];
                    SQL = new StringBuilder();
                    SQL.Append(" DELETE FROM T_FOTO ");
                    SQL.Append(" WHERE ");
                    SQL.Append("     ID_FOTO = :ID_FOTO  ");

                    deleteT_FOTO[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(deleteT_FOTO[index], ":ID_FOTO", DbType.Int64, o.ID_FOTO);

                    deleteT_FOTO[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in deleteT_FOTO)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region ObterPorPK

        public T_FOTO obterPorPK(long pID_FOTO)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_FOTO ");
                SQL.Append(" WHERE ");
                SQL.Append("  ID_FOTO = " + pID_FOTO.ToString());

                DbCommand consultaT_FOTO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_FOTO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_FOTO, DALConnection.transaction);
                T_FOTO obj = null;

                if (reader.Read())
                {
                    obj = new T_FOTO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_FOTO")))
                    {
                        obj.ID_FOTO = Int64.Parse(reader["ID_FOTO"].ToString());
                    }                    
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ATIVIDADE")))
                    {
                        obj.ID_ATIVIDADE = Int64.Parse(reader["ID_ATIVIDADE"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_LEGENDA")))
                    {
                        obj.TX_LEGENDA = reader["TX_LEGENDA"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FOTO_PEQ")))
                    {
                        obj.TX_FOTO_PEQ = reader["TX_FOTO_PEQ"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FOTO_GRDE")))
                    {
                        obj.TX_FOTO_GRDE = reader["TX_FOTO_GRDE"].ToString();
                    }
                }
                reader.Dispose();
                consultaT_FOTO.Dispose();

                return obj;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        
        #endregion

        #region ListarTodos
        public List<T_FOTO> listarTodos()
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_FOTO ORDER BY TX_LEGENDA");

                DbCommand consultaT_FOTO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_FOTO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_FOTO, DALConnection.transaction);
                List<T_FOTO> lista = new List<T_FOTO>();
                T_FOTO obj = null;

                while (reader.Read())
                {
                    obj = new T_FOTO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_FOTO")))
                    {
                        obj.ID_FOTO = Int64.Parse(reader["ID_FOTO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ATIVIDADE_UMEVOR")))
                    {
                        obj.ID_ATIVIDADE_UMEVOR = Int64.Parse(reader["ID_ATIVIDADE_UMEVOR"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ATIVIDADE")))
                    {
                        obj.ID_ATIVIDADE = Int64.Parse(reader["ID_ATIVIDADE"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_LEGENDA")))
                    {
                        obj.TX_LEGENDA = reader["TX_LEGENDA"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FOTO_PEQ")))
                    {
                        obj.TX_FOTO_PEQ = reader["TX_FOTO_PEQ"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FOTO_GRDE")))
                    {
                        obj.TX_FOTO_GRDE = reader["TX_FOTO_GRDE"].ToString();
                    }
                    lista.Add(obj);
                }
                reader.Dispose();
                consultaT_FOTO.Dispose();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<VOT_FOTO> consultar(string legenda, int atividade)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT F.ID_FOTO AS ID_FOTO, F.ID_ATIVIDADE AS ID_ATIVIDADE, F.TX_LEGENDA AS TX_LEGENDA, F.TX_FOTO_PEQ AS TX_FOTO_PEQ, ");
                SQL.Append(" F.TX_FOTO_GRDE AS TX_FOTO_GRDE, A.TX_TITULO AS TX_ATIVIDADE FROM T_FOTO F, T_ATIVIDADE A ");
                SQL.Append(" WHERE F.ID_ATIVIDADE = A.ID_ATIVIDADE AND F.TX_LEGENDA LIKE '" + legenda + "%'");

                if (!atividade.Equals(0))
                    SQL.Append(" AND F.ID_ATIVIDADE = " + atividade.ToString());

                SQL.Append(" ORDER BY A.TX_TITULO, F.TX_LEGENDA");
                DbCommand consultaT_FOTO = database.GetSqlStringCommand(SQL.ToString());
                consultaT_FOTO.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_FOTO, DALConnection.transaction);
                List<VOT_FOTO> lista = new List<VOT_FOTO>();
                VOT_FOTO obj = null;

                while (reader.Read())
                {
                    obj = new VOT_FOTO();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_FOTO")))
                    {
                        obj.ID_FOTO = Int64.Parse(reader["ID_FOTO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ATIVIDADE")))
                    {
                        obj.ID_ATIVIDADE = Int64.Parse(reader["ID_ATIVIDADE"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_LEGENDA")))
                    {
                        obj.TX_LEGENDA = reader["TX_LEGENDA"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FOTO_PEQ")))
                    {
                        obj.TX_FOTO_PEQ = reader["TX_FOTO_PEQ"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_FOTO_GRDE")))
                    {
                        obj.TX_FOTO_GRDE = reader["TX_FOTO_GRDE"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_ATIVIDADE")))
                    {
                        obj.TX_ATIVIDADE = reader["TX_ATIVIDADE"].ToString();
                    }

                    lista.Add(obj);

                }
                reader.Dispose();
                consultaT_FOTO.Dispose();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
    }
}

